home *** CD-ROM | disk | FTP | other *** search
WordWorth | 1997-03-06 | 8.1 KB | 224 lines |
- ; -------------------------------------------------------------------
- ; A Hello World program based on the Blitz Basic original
- ; by Carl Read. Assembler version by Matthew Goode 18/1/97
- ;
- ; Feel free to use any part of this program in your own, and, although
- ; you can claim it as your own, please be considerate and give credit
- ; where credit is due.
- ; -------------------------------------------------------------------
-
- ; -------------------------------------------------------------------
- ; ------------------- Environment Design ----------------------------
-
- UseIntuitionLib = 1
- UseGraphicsLib = 1
-
- ; -------------------------------------------------------------------
- ; ------------------ Included (External) Constants ------------------
-
- IncDir "work:Assem/Include/"
-
- ; ----- Executive Stuff ------
- Include "exec/Exec_lib.i"
- Include "exec/ExecBase.i"
-
- ; ----- Graphics Stuff ------
- Include "Graphics/Graphics_lib.i"
-
- ; ----- Intuition Stuff ------
- Include "Intuition/Intuition_lib.i"
- Include "Intuition/Intuition.i"
-
- ; ----- WorkBench Stuff ------
- Include "WorkBench/WorkBench.i"
-
- ; ----- Other Stuff ------
- Include "Libraries/DosExtens.i"
-
- ; ----- My Stuff ------
- IncDir "work:Assem/MyIncludes/"
- Include "StandardMacros.i"
- Include "SimpleWorkbenchStart.i"
- Include "OpIntuitionMacros.i"
-
- ; -------------------------------------------------------------------
- ; ------------------- Internal Constants ----------------------------
-
- screenWidth = 640
- screenHeight = 256
- mainWindowWidth = 300
- mainWindowHeight = 200
- mainWindowXPos = (screenWidth-mainWindowWidth)/2
- mainWindowYPos = (screenHeight-mainWindowHeight)/2
- mainWindowDetailPen = 2
- mainWindowBlockPen = 1
- mainWindowIDCMP = CLOSEWINDOW
- mainWindowFlags =
- WINDOWSIZING+WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+SMART_REFRESH+RMBTRAP+GIMMEZEROZERO
- mainWindowMinWidth = 40
- mainWindowMinHeight = 40
- mainWindowMaxWidth = -1
- mainWindowMaxHeight = -1
-
- mainWindowType = WBENCHSCREEN
-
- textCol = 1
- backCol = 0
-
- ; -------------------------------------------------------------------
- ; --------------------- Internal Macros -----------------------------
-
- ; -------------------------------------------------------------------
- ; -------------------- Main Program ---------------------------------
-
- TheBegining
- StartHerUp
- OpenWindows
- Bsr OpenMainWindow
- beq WindowFailure
-
- Bsr MainSetup
- Bsr MainLoop
-
- WindowFailure
- Bsr CloseMainWindow
-
- TidyUp ;No need for a RTS
-
-
- ; -------------------------------------------------------------------
-
- MainSetup
- Move.w #0,scrollCount
- rts
-
- MainLoop
- .ll1
- ;CALLGRAF WaitTOF ;Use this line for a smoother demo.
-
- move.l mainWindowHandle,a2
- move.l mainWindowRast,a3
-
- moveq #0,d2 ;Here we get the dimensions of the window
- moveq #0,d3 ;Note that since this is a GIMMEZEROZERO
- ;Window we do not have to worry about the
- ;borders. Usually it is better to use
- ;Normal Windows as they can be faster.
- move.w wd_GZZWidth(a2),d4
- move.w wd_GZZHeight(a2),d5
- Sub.w #1,d4 ;Adjust for 'Of by One Errors
- Sub.w #1,d5
-
- tst.w scrollCount ;Is it time to Reprint?
- bne .noReprintMessage
- GetFontHeight a3,d0 ;Get verticle displacement
- move.w d0,scrollCount
-
- move.w d5,d1
- sub.w d0,d1 ;Get YPos of text
-
- move.w d2,d0 ;Get XPos of text
-
- lea iTextStruct,a1
- lea message,a0
- move.l a0,textToPrint_p
- lea (a3),a0 ;Get RastPort
- CALLINT PrintIText
-
- .noReprintMessage
- moveq #0,d0 ;No horizontal scroll
- moveq #1,d1
- lea (a3),a1 ;Get RastPort for scroll
- CALLGRAF ScrollRaster
-
- sub.w #1,scrollCount
-
-
- move.l mainWindowHandle,a3
- Bsr GetMessageFromWindow
- Beq .ll1
- Cmp.l #CLOSEWINDOW,d1 ;Not really necessary as this is the only
- ;message possible
- bne .ll1
- rts
-
- ; -------------------------------------------------------------------
-
- GetMessageFromWindow
- ;Waits for a message from the window in a3 and then procedes to
- ;get message.
- ;On Exiting: a0 - holds pointer to message
- ; d1 - holds message class
- ; z flag set if message Found
- move.l wd_UserPort(a3),a0
- CALLEXEC GetMsg
- move.l d0,a0
- move.l im_Class(a0),d1
- Tst.l d0
- rts
-
- ; -------------------------------------------------------------------
-
- OpenMainWindow
- ;Opens the main window
- ; D0 holds handle on exit (will be zero if failure)
- ; No need to test as Status Flags will already be set
- Lea newMainWindow,a0
- CALLINT OpenWindow
- Move.l d0,a0
- Move.l wd_RPort(a0),mainWindowRast
- Move.l d0,mainWindowHandle
- rts
-
- CloseMainWindow
- ;Closes the Window if it was opened
- Move.l mainWindowHandle,d0
- Beq .noWindow
- Move.l d0,a0
- CALLINT CloseWindow
- Clr.l mainWindowHandle
- .noWindow
- rts
-
-
- ; -------------------------------------------------------------------
- ; ---------------- Physical Constants -------------------------------
-
- Include "LibraryNames.i"
- even
-
- newMainWindow
- dc.w mainWindowXPos,mainWindowYPos,mainWindowWidth,mainWindowHeight
- dc.b mainWindowDetailPen,mainWindowBlockPen
- dc.l mainWindowIDCMP,mainWindowFlags
- dc.l 0 ;Pointer to first Gadget
- dc.l 0,mainWindowTitle,0,0 ;CheckMark,title,screen,bitmap
- dc.w
- mainWindowMinWidth,mainWindowMinWidth,mainWindowMaxWidth,mainWindowMaxHeight
- dc.w 1 ;mainWindowType
-
- mainWindowTitle
- dc.b "<- Click to exit",0
- Even
-
- message
- dc.b " Hello World! I'm an ASSEMBLER program!!!!!!!.",0
-
- ; -------------------------------------------------------------------
- ; ---------------- Variables ----------------------------------------
-
- iTextStruct dc.b textCol,backCol,RP_JAM2,0
- dc.w 0,0
- dc.l 0
- textToPrint_p dc.l 0,0
-
- Include "StandardVaribles.i"
-
- mainWindowHandle ds.l 1
- mainWindowRast ds.l 1
-
- scrollCount ds.w 1 ;The scroller counter
-
- ; -------------------------------------------------------------------
-
-